#!/bin/bash

#数据库IP
dbserver='127.0.0.1'
#数据库用户名
dbuser='backup'
#数据密码
dbpasswd='密码'
#数据库,如有多个库用空格分开
dbnames='数据库名'
#备份时间
backtime=$(date +%Y%m%d)
starttime=$(date '+%Y-%m-%d %H:%M:%S')
#备份路径
datapath='/data/backup/'
logpath='/data/backup/logs/'

echo "################## ${backtime} #############################" >>${logpath}/mysqlback.log
echo "开始备份:${starttime}" >>${logpath}/mysqlback.log

#日志记录头部
#echo "" >>${logpath}/mysqlback.log
echo "-------------------------------------------------" >>${logpath}/mysqlback.log
echo "备份时间为${backtime},备份数据库表 ${dbnames} 开始" >>${logpath}/mysqlback.log
#正式备份数据库
for db in $dbnames; do
  source=$(mysqldump -h ${dbserver} -u ${dbuser} -p${dbpasswd} --single-transaction --quick --databases ${db} >${datapath}/${db}_${backtime}.sql) 2>>${logpath}/mysqlback.log
  #备份成功以下操作
  if [ "$?" == 0 ]; then
    cd $datapath
    #为节约硬盘空间，将数据库压缩
    tar zcf ${db}_${backtime}.tar.gz ${db}_${backtime}.sql >/dev/null
    #删除原始文件，只留压缩后文件
    rm -f ${datapath}/${db}_${backtime}.sql
    #删除七天前备份，也就是只保存7天内的备份
    find $datapath -name "*.tar.gz" -type f -mtime +7 -exec rm -rf {} \; >/dev/null 2>&1
    echo "数据库表 ${dbnames} 备份成功!!" >>${logpath}/mysqlback.log
  else
    #备份失败则进行以下操作
    echo "数据库表 ${dbnames} 备份失败!!" >>${logpath}/mysqlback.log
  fi
done
endtime=$(date '+%Y-%m-%d %H:%M:%S')
echo "完成备份: ${endtime}" >>${logpath}/mysqlback.log
echo "################## ${backtime} #############################" >>${logpath}/mysqlback.log
